<?php

namespace app\controller;

use app\model\Config;
use app\model\RawMsgLog;
use app\model\Wxbot;
use support\Log;
use support\Request;

class IndexController
{
    public function index(Request $request): void
    {
        try {
            Log::info('开始处理===============================================================================');
            $params = $request->all();
            //写入数据库
            RawMsgLog::create(['raw_msg' => json_encode($params)]);
            Log::info('新消息内容:', $params);
            $create_time = searchArrayByKey($params, 'CreateTime');   //收到消息的时间
            $is_sender = searchArrayByKey($params, 'IsSender');   //是否是自己发送的消息 1=自己发送的消息 0=别人发送的消息
            $chat_user = searchArrayByKey($params, 'StrTalker');   //会话对方的微信id
            $msg_id = searchArrayByKey($params, 'MsgSvrID');    //消息id
            $msg_content = searchArrayByKey($params, 'StrContent');  //消息内容

            if ($is_sender == 0) {
                Log::info('在' . date('Y-m-d H:i:s', $create_time) . '收到来自' . $chat_user . '的消息，消息id为' . $msg_id . '消息内容为:' . $msg_content);
            } else {
                Log::info('在' . date('Y-m-d H:i:s', $create_time) . '自己发送的消息，消息id为' . $msg_id . '消息内容为:' . $msg_content);
            }

            //处理消息
            //消息分为普通消息和公众号消息:目前只处理普通消息
            $msg_type = $params['type'];
            if ($msg_type == 'general') {
                //处理普通消息
                //是否是管理员命令
                $cmd_symbol = Config::getCmdSymbol();
                if (str_starts_with($msg_content, $cmd_symbol)) {
                    Wxbot::handleAdminCmd($chat_user, $msg_content);
                } else {
                    //判断是否是转发消息:该消息的发送者不是自己，并且命中了转发规则
                    if ($is_sender == 0) {
                        //转发的微信id[s]
                        $wxid_arr = Wxbot::getForwardWxid($msg_content);
                        //如果该消息就是在转发的微信id[s]中，需要排除
                        $wxid_arr = array_diff($wxid_arr, [$chat_user]);
                        if (!empty($wxid_arr)) {
                            Log::info('转发的微信id[s]:' . implode(',', $wxid_arr));
                            foreach ($wxid_arr as $wxid) {
                                //处理转发消息
                                Wxbot::forwardmsg($wxid, $msg_id);
                            }
                            //再给原对话回复一个 1
                            Wxbot::sendTextMsg($chat_user, '已转发');
                        } else {
                            Log::info('没有命中转发规则');
                        }
                    }
                }
            }
            Log::info('处理完成==================================================================================');
        } catch (\Exception $e) {
            Log::error('处理消息失败:' . $e->getMessage());
        }
    }
}
